// 角色控制器
const Role = require('../models/role.model');
const Menu = require('../models/menu.model');
const sendResponse = require('../utils/response');
const dateFormatter = require('../utils/dateFormatter'); // 引入时间格式化工具类
const {Op} = require('sequelize');

// 获取角色列表
exports.getAllRoles = async (req, res, next) => {
  try {
    // 获取分页参数
    const page = parseInt(req.params.page, 10) || 1;
    const limit = parseInt(req.params.limit, 10) || 10;
    // 计算偏移量
    const offset = (page - 1) * limit;
    // 获取搜索角色名
    const { roleName } = req.query;
    const where = roleName ? { roleName: { [Op.like]: `%${roleName}%` } } : null;
    
    const roleList = await Role.findAndCountAll({
      where,
      limit,
      offset,
      order: [['id', 'DESC']]
    });

    // 使用改进后的 dateFormatList 函数格式化日期字段
    const formattedRoles = dateFormatter.dateFormatList(roleList.rows, ['createTime', 'updateTime']);

    sendResponse(res, {
      message: '获取角色列表成功', 
      data: {
        records: formattedRoles,
        // 总条数
        total: roleList.count,
        // 每页显示条数
        size: parseInt(limit),
        // 当前页
        current: parseInt(page),
        // 总页数
        pages: Math.ceil(roleList.count / parseInt(limit))
      }
    });
  } catch (error) {
    next(error);
  }
};

// 创建角色
exports.saveRole = async (req,res,next) => {
  const { roleName, remark = "" } = req.body;
  // console.log(req.body);

  try {
    // 检查角色名是否已存在
    // const existingRole = await Role.findOne({
    //   where: { roleName: roleName }
    // });
    // if (existingRole) {
    //   return sendResponse(res, { code: 400, message: '角色名已存在！' });
    // }

    const role = await Role.create({
      roleName,
      remark
    });

    console.log("---创建角色成功---");
    sendResponse(res, { message: '角色创建成功', data: { id: role.id, roleName, remark } });
  } catch (error) {
    next(error);
  }
};

// 删除角色
exports.removeRole = async (req, res, next) => {
  const id = parseInt(req.params.id);

  // 检查 id 是否为有效整数
  if (isNaN(id)) {
    return sendResponse(res, { code: 400, message: "无效的角色ID格式" });
  }
  
  try {
    // 检查角色是否存在
    const existingRole = await Role.findByPk(id);
    if (!existingRole) {
      console.log("---角色id不存在---");
      return sendResponse(res, { code: 404, message: '角色id不存在！' });
    }

    // 删除角色
    await Role.destroy({
      where: { id: id }
    });

    console.log("---删除角色成功---");
    sendResponse(res, { message: '角色删除成功' });
  } catch (error) {
    next(error);
  }
};

// 更新角色
exports.editRole = async (req, res, next) => {
  const { id, remark, roleName } = req.body;

  try {
    // 检查角色是否存在
    const existingRole = await Role.findByPk(id);
    if (!existingRole) {
      console.log("---角色id不存在---");
      return sendResponse(res, { code: 404, message: '角色id不存在！' });
    }

    // 更新角色
    await Role.update({
      roleName,
      remark
    }, {
      where: { id: parseInt(id) }
    });

    console.log("---更新角色成功---");
    sendResponse(res, { message: '角色更新成功' });
  }catch (error) {
    next(error);
  }
};
